#pragma once

#ifndef LHJ_CORE_APPS_APP_H__
#define LHJ_CORE_APPS_APP_H__

namespace cores
{
    namespace apps
    {
        class App
        {
        protected:
            /**
             * @brief 构造函数
             */
            App();

            /**
             * @brief 初始化对象
             */
            virtual void initialize() = 0;

            /**
             * @brief 终止对象
             */
            virtual void finalize() = 0;

            /**
             * @brief 执行程序
             */
            virtual int run() = 0;

        public:
            /**
             * @brief 析构函数
             */
            virtual ~App();

            /**
             * @brief 初始化
             */
            static void Initialize();

            /**
             * @brief 销毁对象
             */
            static void Finalize();

            /**
             * @brief 执行程序
             */
            static int Run();

        private:
            static App * globalApp;
        };
    }
}

#endif